package com.cl.park.dao;

import java.io.Serializable;
import java.util.List;

import com.cl.park.util.PageUtil;
@SuppressWarnings("unchecked")
public interface BaseDao {
	/**
	 * 添加
	 * @param obj
	 */
	public void add(Object obj);
	/**
	 * 删除
	 * @param obj
	 */
	public void delete(Object obj);
	/**
	 * 根据主键删除
	 * @param clazz
	 * @param id
	 */
	public void deleteById(Class clazz, Serializable id);
	/**
	 * 修改
	 * @param obj
	 */
	public void update(Object obj);
	/**
	 * 根据主键查询
	 * @param clazz
	 * @param id
	 * @return
	 */
	public Object get(Class clazz, Serializable id);
	/**
	 * 根据多个属性查询
	 * @param clazz
	 * @param strs
	 * @return
	 */
	public Object getByNProperty(Class clazz, String... strs);
	/**
	 * 根据属性查询
	 * @param clazz
	 * @param pName
	 * @param pValue
	 * @return
	 */
	public Object getUniqueByProperty(Class clazz, String pName, Object pValue);
	/**
	 * 根据HQL查询
	 * @param hql
	 * @return
	 */
	public Object getUniqueByHql(String hql);
	/**
	 * 根据SQL查询
	 * @param sql
	 * @param clazz
	 * @return
	 */
	public Object getUniqueBySql(String sql, Class clazz);
	/**
	 * 查询所有
	 */
	public List<Object> getList(Class clazz);
	/**
	 * 根据属性查询 全部
	 * @param clazz
	 * @param pName
	 * @param pValue
	 * @return
	 */
	public List<Object> getListByProperty(Class clazz, String pName,
			Object pValue);
	/**
	 * 根据属性和条件查询 全部
	 * @param clazz	类
	 * @param pName	属性名称
	 * @param pValue 属性值	
	 * @param condition 符号
	 * @return 集合
	 */
	public List<Object> getListByProperty(Class clazz, String pName,
			Object pValue, String condition);
	/**
	 * 根据多个属性模糊查询
	 * @param clazz 类
	 * @param strs 【1属性名2值3属性4值】
	 * @return
	 */
	public List getListByNProperty(Class clazz, String... strs);
	/**
	 * 根据HQL查询 全部
	 * @param hql
	 * @return
	 */
	public List<Object> getListByHql(String hql);
	/**
	 * 根据SQL查询全部
	 * @param sql
	 * @param clazz
	 * @return
	 */
	public List getListBySql(String sql, Class clazz);
	/**
	 * 分页查询全部
	 * @param calzz
	 * @param pageUtil
	 */
	public void getListByPage(Class calzz, PageUtil pageUtil);
	/**
	 * 根据SQL分页查询
	 * @param hql
	 * @param pageUtil
	 */
	public void getListByPage(String hql, PageUtil pageUtil);
	/**
	 * 根据多个属性分页模糊查询
	 * @param clazz 类
	 * @param strs 【1属性名2值3属性4值】
	 * @return
	 */
	public void getListByNProperty(Class clazz,PageUtil pageUtil, String... strs);
	/**
	 * 执行分页查询LIST的HQL
	 * @param hql
	 * @return
	 */
	public void doHqlForList(String hql,PageUtil pageUtil);
	/**
	 * 执行单一查询的HQL语句
	 * @param hql
	 * @return
	 */
	public Object doHqlForOne(String hql);
	
	/**
	 * 根据HQL更新
	 * @param hql
	 * @return
	 */
	public Integer updateUniqueByHql(String hql);
	/**
	 * 执行分页查询LIST的HQL(new)
	 * @param hql
	 * @return
	 */
	public void getNewListByPage(String hql, PageUtil pageUtil);
	/**
	 *根据hql删除 
	 * 
	 */
	public Integer delUniqueByHql(String hql);
}
